package utils;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
   private static String byteArrayToHexString(byte b[]) {
      StringBuffer resultSb = new StringBuffer();
      for (int i = 0; i < b.length; i++)
         resultSb.append(byteToHexString(b[i]));

      return resultSb.toString();
   }

   private static String byteToHexString(byte b) {
      int n = b;
      if (n < 0)
         n += 256;
      int d1 = n / 16;
      int d2 = n % 16;
      return hexDigits[d1] + hexDigits[d2];
   }

   public static String MD5Encode(String origin, String charsetname) {
      String resultString = null;
      try {
         resultString = new String(origin);
         MessageDigest md = MessageDigest.getInstance("MD5");
         if (charsetname == null || "".equals(charsetname))
            resultString = byteArrayToHexString(md.digest(resultString
                  .getBytes()));
         else
            resultString = byteArrayToHexString(md.digest(resultString
                  .getBytes(charsetname)));
      } catch (Exception exception) {
      }
      return resultString;
   }

   public static String encryption32MD5(String text) {
      String re_md5 = new String();
      try {
         MessageDigest md = MessageDigest.getInstance("MD5");
         md.update(text.getBytes());
         byte[] b = md.digest();
         StringBuffer buf = new StringBuffer("");
         for (int offset = 0; offset < b.length; ++offset) {
            int i = b[offset];
            if (i < 0) {
               i += 256;
            }
            if (i < 16) {
               buf.append("0");
            }
            buf.append(Integer.toHexString(i));
         }
         re_md5 = buf.toString();
      } catch (NoSuchAlgorithmException var7) {
         var7.printStackTrace();
      }
      return re_md5;
   }

   public static String encode(String source) {
      try {
         MessageDigest m = MessageDigest.getInstance("MD5");
         m.update(source.getBytes("UTF-8"));
         byte[] result = m.digest();
         return bytes2HexString(result);
      } catch (Exception e) {
         return source;
      }
   }

   public static String bytes2HexString(byte[] bytes) {
      StringBuffer sb = new StringBuffer();
      for (byte b : bytes) {
         String hex = Integer.toHexString(b & 0xFF);
         if (hex.length() == 1) {
            hex = '0' + hex;
         }
         sb.append(hex.toUpperCase());
      }
      return sb.toString();
   }

   private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
         "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

}
